﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Negocio.Atividade;
using Negocio.Evento;
using Persistente;

namespace Finalcountdown.Evento.Acompanhar
{
    public partial class acompanharEvento : System.Web.UI.Page
    {
        
        protected void Page_Load(object sender, EventArgs e)
        {
            if(!IsPostBack)
            {
                if (Request.QueryString["id"] != null)
                {
                    hdfIdEventoEmExec.Value = Request.QueryString["id"].ToString();
                    carregarDados();
                    
                }else
                {
                    Response.Redirect("~/Evento/Consultar/consultarEvento.aspx");
                }
            }
        }

        private void carregarDados()
        {
            var idEvento = hdfIdEventoEmExec.Value;
            var obNAtividade = new NAtividade();
            var listAtividades = obNAtividade.pegarAtividadesPorEvento(Convert.ToInt32(idEvento));
            if(listAtividades.Count > 0)
            {
                grdAtividades.DataSource = listAtividades;
                grdAtividades.DataBind();
                divGrid.Visible = true;
                Timer1sec.Enabled = true;
                Timer1sec.Interval = 1000;
            }else
            {
                divGrid.Visible = false;
                Timer1sec.Enabled = false;
                divMsnFecharAtencao.Visible = true;
                divMsnFecharSucesso.Visible = false;
                lblAtencao.Text = "Evento fechado.";
                lkbFechar.Visible = false;
            }
            

            

        }

        protected void grdAtividades_RowCommand(object sender, GridViewCommandEventArgs e)
        {

            var idAtividade = e.CommandArgument.ToString();
            var obNAtividade = new NAtividade();
            switch (e.CommandName)
            {
                case "play":
                        if(String.IsNullOrEmpty(hdfIdAtividadeEmExec.Value))
                        {
                            obNAtividade.iniciarAtividade(Convert.ToInt32(idAtividade));
                        }else
                        {
                            obNAtividade.pararEComecarAtividades(Convert.ToInt32(hdfIdAtividadeEmExec.Value), Convert.ToDateTime(hdfTmRest.Value).TimeOfDay, Convert.ToInt32(idAtividade));
                        }
                    break;
                case "pause":
                        if(idAtividade == hdfIdAtividadeEmExec.Value)
                        {
                            obNAtividade.pararAtividade(Convert.ToInt32(idAtividade), Convert.ToDateTime(hdfTmRest.Value).TimeOfDay);
                            hdfIdAtividadeEmExec.Value = "";
                        }
                    break;
                case "restart":
                    obNAtividade.recomecarContagem(Convert.ToInt32(idAtividade));
                    carregarDados();
                    break;
                case "editar":
                    var idEventoAlterar = e.CommandArgument.ToString();
                    hdfIdAtividadeAlterar.Value = idEventoAlterar;
                    var obTbAtividade = obNAtividade.pegarAtividadePorId(Convert.ToInt32(idAtividade));
                    txtNmAtividadeAlterar.Text = obTbAtividade.nm_atividade;
                    txtTmAtividadeAlterar.Text = obTbAtividade.tm_evento_total.Minutes.ToString();
                    Timer1sec.Enabled = false;
                    ModalPopupAlterar.Show();
                    break;
            }
        }

        protected void Timer1sec_Tick(object sender, EventArgs e)
        {
            carregarDados();

        }

        protected void grdAtividades_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                //Buscar situação da contagem
                var obNAtividade = new NAtividade();
                var idAtividade = Convert.ToInt32(e.Row.Cells[0].Text);
                var nrSituacaoContagem = obNAtividade.pegarSituacaoContagem(idAtividade);

                if (e.Row.Cells[4].Text == "00:00:00" && nrSituacaoContagem != 1)
                {
                    e.Row.Cells[4].Text = e.Row.Cells[2].Text;
                }

                if (!string.IsNullOrEmpty(e.Row.Cells[3].Text) && e.Row.Cells[3].Text != "&nbsp;")
                {
                    TimeSpan dt_start = Convert.ToDateTime(e.Row.Cells[3].Text).TimeOfDay;
                    TimeSpan dt_atual = DateTime.Now.TimeOfDay;
                    TimeSpan dt_tempo_decorrido = dt_atual - dt_start;
                    TimeSpan resta = new TimeSpan();

                    if (nrSituacaoContagem == 1)
                    {
                        resta = Convert.ToDateTime(e.Row.Cells[4].Text).TimeOfDay + dt_tempo_decorrido;
                        e.Row.Cells[4].Text = resta.ToString(@"hh\:mm\:ss");
                        e.Row.Cells[4].Style.Add("color", "red");
                        hdfTmRest.Value = resta.ToString(@"hh\:mm\:ss");
                    }else
                    {

                        resta = Convert.ToDateTime(e.Row.Cells[4].Text).TimeOfDay - dt_tempo_decorrido;

                        //Alterando Situacao de Contagem para 1 (Contagem Crescente)
                        if (resta.ToString(@"hh\:mm\:ss") == "00:00:00")
                        {
                            obNAtividade.alterarSituacaoContagem(idAtividade);
                            e.Row.Cells[4].Style.Add("color", "red");
                        }else
                        {
                            e.Row.Cells[4].Style.Add("color", "blue");
                        }

                        e.Row.Cells[4].Text = resta.ToString(@"hh\:mm\:ss");
                        hdfTmRest.Value = resta.ToString(@"hh\:mm\:ss");
                    }
                   
                   

                    hdfIdAtividadeEmExec.Value = e.Row.Cells[0].Text;

                    var linkPlay = (LinkButton)e.Row.FindControl("lkbPlay");
                    var linkPause = (LinkButton)e.Row.FindControl("lkbPause");
                    var linkRestart = (LinkButton)e.Row.FindControl("lkbRestart");
                    var linkEditar = (LinkButton)e.Row.FindControl("lkbEditar");
                    linkPlay.Visible = false;
                    linkPause.Visible = true;

                    linkRestart.Visible = false;
                    linkEditar.Visible = false;

                }else
                {
                    e.Row.Cells[3].Text = "-";
                    var linkPlay = (LinkButton)e.Row.FindControl("lkbPlay");
                    var linkPause = (LinkButton)e.Row.FindControl("lkbPause");
                    var linkRestart = (LinkButton)e.Row.FindControl("lkbRestart");
                    var linkEditar = (LinkButton)e.Row.FindControl("lkbEditar");
                    linkPlay.Visible = true;
                    linkPause.Visible = false;

                    linkRestart.Visible = true;
                    linkEditar.Visible = true;

                    //Buscar situação da contagem
                    obNAtividade = new NAtividade();
                    idAtividade = Convert.ToInt32(e.Row.Cells[0].Text);
                    nrSituacaoContagem = obNAtividade.pegarSituacaoContagem(idAtividade);

                    if (nrSituacaoContagem == 0)
                    {
                        e.Row.Cells[4].Style.Add("color", "#7baffc");
                    }else
                    {
                        e.Row.Cells[4].Style.Add("color", "#fc7b7b");
                    }

                }

            }
        }

        protected void lkbFechar_Click(object sender, EventArgs e)
        {
            Timer1sec.Enabled = false;
            ModalPopupFechar.Show();
        }

        protected void lkbNao_Click(object sender, EventArgs e)
        {
            Timer1sec.Enabled = true;
            Timer1sec.Interval = 1000;
        }

        protected void lkbSim_Click(object sender, EventArgs e)
        {

            var obNAtividade = new NAtividade();

            if (hdfIdAtividadeEmExec.Value != "")
            {
                obNAtividade.pararAtividade(Convert.ToInt32(hdfIdAtividadeEmExec.Value), Convert.ToDateTime(hdfTmRest.Value).TimeOfDay);
                hdfIdAtividadeEmExec.Value = "";
            }

            var obNEvento = new NEvento();
            if(obNEvento.fecharEvento(Convert.ToInt32(hdfIdEventoEmExec.Value)))
            {
                divMsnFecharSucesso.Visible = true;
                divMsnFecharAtencao.Visible = false;
                grdAtividades.Enabled = false;
                lkbFechar.Visible = false;
                Timer1sec.Enabled = false;
            }else
            {
                divMsnFecharSucesso.Visible = false;
                divMsnFecharAtencao.Visible = true;
                Timer1sec.Enabled = true;
                Timer1sec.Interval = 1000;
            }

        }

        private bool verificarFormAlterar()
        {
            var boForm = true;

            if (string.IsNullOrEmpty(txtNmAtividadeAlterar.Text))
            {
                boForm = false;
                lblNmAtividadeAlterarObrig.Text = "Nome da Atividade é obrigatório!";
            }
            else
            {
                lblNmAtividadeAlterarObrig.Text = "";
            }
            if (txtTmAtividadeAlterar.Text == "___")
            {
                boForm = false;
                lblTmAtividadeAlterarObrig.Text = "O Tempo da Atividade é obrigatório!";
            }
            else
            {
                lblTmAtividadeAlterarObrig.Text = "";
            }

            return boForm;
        }

        protected void lkbAlterar_Click(object sender, EventArgs e)
        {
            if (verificarFormAlterar())
            {
                var obTbATividade = new tb_atividades();
                var obNAtividade = new NAtividade();

                obTbATividade.id_atividade = Convert.ToInt32(hdfIdAtividadeAlterar.Value);
                obTbATividade.nm_atividade = txtNmAtividadeAlterar.Text;
                obTbATividade.tm_evento_total = TimeSpan.FromMinutes(Convert.ToInt32(txtTmAtividadeAlterar.Text.Replace("_", "")));

                obNAtividade.recomecarContagem(obTbATividade.id_atividade);

                obNAtividade.Alterar(obTbATividade);
                carregarDados();

            }
        }

        protected void lkbCancelar_Click(object sender, EventArgs e)
        {
            Timer1sec.Enabled = true;
            Timer1sec.Interval = 1000;
            ModalPopupAlterar.Hide();
        }
    }
}